﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PersonalAccounting.DataAccess;

namespace PersonalAccounting.Business
{
    public class CuentaFacade : IFacade<Cuenta>
    {

        #region IFacade<Cuenta> Members

        public bool Select(Cuenta obj)
        {
            IDAO<CuentaVO> dao = new DAOCuenta();
            CuentaVO cuenta = BuildCuentaVO(obj);
            return dao.Select(cuenta);
        }

        public void Load(Cuenta obj)
        {
            throw new NotImplementedException();
        }


        public bool Insert(Cuenta obj)
        {
            IDAO<CuentaVO> dao = new DAOCuenta();
            CuentaVO cuenta = BuildCuentaVO(obj);
            return dao.Insert(cuenta);
        }

        public bool Update(Cuenta obj)
        {
            IDAO<CuentaVO> dao = new DAOCuenta();
            CuentaVO cuenta = BuildCuentaVO(obj);
            return dao.Update(cuenta);
        }

        public bool Delete(Cuenta obj)
        {
            IDAO<CuentaVO> dao = new DAOCuenta();
            CuentaVO cuenta = BuildCuentaVO(obj);
            return dao.Delete(cuenta);
        }


        public List<Cuenta> GetAll()
        {
            IDAO<CuentaVO> dao = new DAOCuenta();
            List<Cuenta> lista = new List<Cuenta>();

            foreach (CuentaVO obj in dao.GetAll())
            {
                Cuenta cuenta = new Cuenta(obj);
                lista.Add(cuenta);
            }

            return lista;
        }

        #endregion


        #region Public Methods

        public int GetNextCode()
        {
            DAOCuenta dao = new DAOCuenta();
            return dao.GetNextCode();
        }

        #endregion

        #region Private Methods

        private CuentaVO BuildCuentaVO(Cuenta obj)
        {
            MonedaVO moneda = new MonedaVO(obj.Moneda.Codigo, obj.Moneda.Nombre, obj.Moneda.Simbolo);
            return new CuentaVO(obj.Codigo, moneda, obj.Nombre);
        }

        #endregion

    }
}